# emacs: -*- sh -*-
#
# bash completion file for cobbler
#
# Copyright 2008 John L. Villalovos <john@sodarock.com>
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Version History:
# 0.1: Initial version to do some basic command line completion

_cobbler()
{
    local cur prev special specialsub SPECIAL_CMDS SPECIALSUB_CMDS

    COMPREPLY=()
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}

    # Let's only run it once
    SPECIAL_CMDS=`cobbler-completion | sed "s/ /|/g"`
    for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
	    if [[ ${COMP_WORDS[i]} == @(${SPECIAL_CMDS}) ]]; then
		    special=${COMP_WORDS[i]}
		    break
	    fi
    done

    if [ -n "$special" ]
    then
	# Take care of sub commands
	SPECIALSUB_CMDS=`cobbler-completion $special | sed "s/ /|/g"`
	if [ -n "${SPECIALSUB_CMDS}" ] ; then
	    for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
		    if [[ ${COMP_WORDS[i]} == @(${SPECIALSUB_CMDS}) ]]; then
			    specialsub=${COMP_WORDS[i]}
			    break
		    fi
	    done
	else
	    # This command has no subcommands
	    COMPREPLY=( $( compgen -f -W '$( cobbler-completion $special )' -- $cur ) )
	    return 0
	fi

	if [ -n "$specialsub" ]
	then
	    COMPREPLY=( $( compgen -f -W '$( cobbler-completion $special $specialsub )' -- $cur ) )
	    return 0
	else
	    COMPREPLY=( $( compgen -W '$( cobbler-completion $special )' -- $cur ) )
	    return 0
	fi
    fi

    case $cur in
	--*)
	    COMPREPLY=( $( compgen -W 'help' -- $cur ) )
	    return 0
	    ;;
	-*)
	    COMPREPLY=( $( compgen -W '-h' -- $cur ) )
	    return 0
	    ;;
    esac

    _count_args

    case $args in
	1)
	    COMPREPLY=( $( compgen -W '$( cobbler --helpbash )' -- $cur ) )
	    ;;
    esac
}
complete -F _cobbler cobbler
